home *** CD-ROM | disk | FTP | other *** search
/ 17 Bit Software 6: Level 6 / 17 Bit - Level 6 (1998)(Epic Marketing)[!].iso / quartz / q0528.dms / q0528.adf / subs.c < prev    next >
C/C++ Source or Header  |  1991-02-02  |  1KB  |  88 lines

  1.  
  2. /*
  3.  *  SUBS.C
  4.  *
  5.  *  (c)Copyright 1990, All Rights Reserved
  6.  */
  7.  
  8. #include "defs.h"
  9.  
  10. Prototype int ExtArgsEnv(short, char ***, char *);
  11. Prototype char *skipspace(char *);
  12. Prototype char *skipnspace(char *);
  13.  
  14. /*
  15.  *  ExtArgsEnv()        DCCOPTS
  16.  */
  17.  
  18. int
  19. ExtArgsEnv(ac, pav, envname)
  20. short ac;
  21. char ***pav;
  22. char *envname;
  23. {
  24.     int fd = open(envname, O_RDONLY);
  25.     long len;
  26.  
  27.     if (fd < 0)
  28.     return(ac);
  29.  
  30.     if ((len = lseek(fd, 0L, 2)) > 0) {
  31.     char *str = malloc(len + 1);
  32.     char *ptr;
  33.     int nac = 0;
  34.     char **nav;
  35.  
  36.     lseek(fd, 0L, 0);
  37.     read(fd, str, len);
  38.     str[len] = 0;
  39.  
  40.     /*
  41.      *  parse
  42.      */
  43.  
  44.     ptr = skipspace(str);
  45.     while (*ptr) {
  46.         ++nac;
  47.         ptr = skipnspace(ptr);
  48.         ptr = skipspace(ptr);
  49.     }
  50.     nav = malloc((ac + nac + 1) * sizeof(char *));
  51.     movmem(*pav, nav, ac * sizeof(char *));
  52.     nac = ac;
  53.     ptr = skipspace(str);
  54.     while (*ptr) {
  55.         nav[nac] = ptr;
  56.         ptr = skipnspace(ptr);
  57.         if (*ptr)
  58.         *ptr++ = 0;
  59.         ptr = skipspace(ptr);
  60.         ++nac;
  61.     }
  62.     nav[nac] = NULL;
  63.     ac = nac;
  64.     *pav = nav;
  65.     }
  66.     close(fd);
  67.     return(ac);
  68. }
  69.  
  70. char *
  71. skipspace(ptr)
  72. char *ptr;
  73. {
  74.     while (*ptr == ' ' || *ptr == 9)
  75.     ++ptr;
  76.     return(ptr);
  77. }
  78.  
  79. char *
  80. skipnspace(ptr)
  81. char *ptr;
  82. {
  83.     while (*ptr != ' ' && *ptr != 9 && *ptr)
  84.     ++ptr;
  85.     return(ptr);
  86. }
  87.  
  88.